package com.zhuoyue.system.mapper;

import com.zhuoyue.common.annotation.DataSource;
import com.zhuoyue.common.core.domain.ChartData;
import com.zhuoyue.system.domain.TblDevice;
import com.zhuoyue.system.domain.po.SelectTimePo;
import com.zhuoyue.system.domain.po.TblDeviceActionPo;
import com.zhuoyue.system.domain.po.TblDevicePo;
import com.zhuoyue.system.domain.vo.TblDeviceActionVo;
import com.zhuoyue.system.domain.vo.TblDeviceVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

import static com.zhuoyue.common.enums.DataSourceType.SLAVE;

/**
 * 设备Mapper接口
 *
 * @author hewenze
 * @date 2020-08-07
 */
@DataSource(SLAVE)
public interface TblDeviceMapper {

    Integer getDeviceCount(TblDevicePo tblDevicePo);

    /**
     * 查询设备列表
     *
     * @param tblDevicePo 设备
     * @return 设备集合
     */
    public List<TblDeviceVo> selectTblDeviceList(TblDevicePo tblDevicePo);


    TblDeviceActionVo getDeviceAction(TblDeviceActionPo tblDeviceActionPo);

    /**
     * 查询前七天的设备新增数据
     *
     * @param selectTimePo
     * @return
     */
    List<ChartData> getDeviceCountOfDays(SelectTimePo selectTimePo);

    /**
     * 查询一段时间内的设备新增数据
     *
     * @param selectTimePo
     * @return
     */
    List<ChartData> getDeviceCountRangeTime(SelectTimePo selectTimePo);

    List<ChartData> getTopTenDeviceCount(SelectTimePo selectTimePo);

    List<ChartData> getDeviceCountByOrgCode(@Param("orgCode") String orgCode);

    /**
     * 根据网关ID查询该网关下各个设备及数量
     *
     * @param getawayId
     * @return
     */
    List<ChartData> getDeviceCountByGatewayId(@Param("getawayId") String getawayId);

    /**
     * 查询家庭下的所有zigbee设备
     *
     * @param tblDevicePo
     * @return
     */
    List<TblDeviceVo> selectTblDeviceListByHomeId(TblDevicePo tblDevicePo);

    /**
     * 通过IDs 获取对应信息
     *
     * @param list
     * @return
     */
    List<TblDeviceVo> getListDeviceByIds(List<String> list);

    /**
     * 查询设备信息通过
     *
     * @param id
     * @return
     */
    TblDeviceVo selectDeviceMessageById(@Param("id") String id);


    /**
     * 根据设备mac和开关路数查询设备
     *
     * @param zigbeeMac
     * @param wayNum
     * @return
     */
    TblDeviceVo selectDeviceByMacAndWay(@Param("zigbeeMac") String zigbeeMac, @Param("wayNum") Integer wayNum);

    /**
     * 查询设备ID, 根据设备名称或设备mac
     *
     * @param device
     * @return
     */
    List<String> selectDeviceMessage(TblDevice device);
}
